package validaciones;

import org.json.JSONException;
import org.json.JSONObject;

/*
 * Compara dos objetos de JSON e indica cuales son los que deben cambiarse
 * */

public class ValidateCompare2JSON {
	private JSONObject old_data;//el primer arreglo
	private JSONObject new_data;//segundo arreglo
	private String query;//guarda los posibles cambios y que campos cambian
		
	public ValidateCompare2JSON(JSONObject old_data_,JSONObject new_data_){
		this.old_data=old_data_;
		this.new_data=new_data_;
		query="";//crea una consulta
	}
	
	
	
	//para la concatenacion
	public String concatCadena(String s){
		return s.length()>0 ? ",":"";
	}
	
	/*Retorna el cambio que se dedica*/
	public String getQuery(){
		return query;
	}
	
	/*
	 * Compara los dos elementos con respecto  a las 2 llaves
	 * field  indica el campo que puede cambiar
	 * 
	 * */
	public void Compare(String field,String old_key,String new_key){
		try {
			Object old_value=old_data.get(old_key);
			Object new_value=new_data.get(new_key);
			
			if(old_value instanceof String){//son de la clase String
				if(old_value.toString().compareTo(new_value.toString())!=0)//son de la clase String
					query+=concatCadena(query)+field+"='"+new_value.toString()+"'";
			}
			else if(old_value instanceof Integer){//son de la clase INt
				if(Integer.parseInt(old_value.toString())!=Integer.parseInt(new_value.toString()))
					query+=concatCadena(query)+field+"="+new_value.toString();
			}
			
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	
	//lo mismo que el anterior, solo que no importa si esta en minus o mayus
	public void CompareIgnoraCase(String field,String old_key,String new_key){
		try {
			Object old_value=old_data.get(old_key);
			Object new_value=new_data.get(new_key);
			
			if(old_value instanceof String){//son de la clase String
				if(old_value.toString().compareToIgnoreCase(new_value.toString())!=0)//son de la clase String
					query+=concatCadena(query)+field+"='"+new_value.toString()+"'";
			}
			else if(old_value instanceof Integer){//son de la clase INt
				if(Integer.parseInt(old_value.toString())!=Integer.parseInt(new_value.toString()))
					query+=concatCadena(query)+field+"="+new_value.toString();
			}
			
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	

	
	//Compara ambos pero devuelve true si es
	public boolean BooleanCompare(String field,String old_key,String new_key){
		boolean salida=true;
		try {
			Object old_value=old_data.get(old_key);
			Object new_value=new_data.get(new_key);
			if(old_value instanceof String){//son de la clase String
				if(old_value.toString().compareTo(new_value.toString())!=0)//son de la clase String
				{
					query+=concatCadena(query)+field+"='"+new_value.toString()+"'";
					return false;
				}
			}
			else if(old_value instanceof Integer){//son de la clase INt
				if(Integer.parseInt(old_value.toString())!=Integer.parseInt(new_value.toString()))
				{
					query+=concatCadena(query)+field+"="+new_value.toString();
					return false;
				}
			}
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return salida;
	}

	//Compara ambos pero devuelve true si es
	public boolean BooleanCompareIgnoreCase(String field,String old_key,String new_key){
		boolean salida=true;
		try {
			Object old_value=old_data.get(old_key);
			Object new_value=new_data.get(new_key);
			if(old_value instanceof String){//son de la clase String
				if(old_value.toString().compareToIgnoreCase(new_value.toString())!=0)//son de la clase String
				{
					query+=concatCadena(query)+field+"='"+new_value.toString()+"'";
					return false;
				}
			}
			else if(old_value instanceof Integer){//son de la clase INt
				if(Integer.parseInt(old_value.toString())!=Integer.parseInt(new_value.toString()))
				{
					query+=concatCadena(query)+field+"="+new_value.toString();
					return false;
				}
			}
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return salida;
	}
	
	
}
